package com.atguigu.tingshu.user.api;

import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;

public class DemoCompletableFuture {
     public static void main(String[] args) throws ExecutionException, InterruptedException {
         //  CompletableFuture -- 异步编排: 开启一个线程执行一个异步相对耗时的任务.
         //  如何创建一个CompletableFuture 对象 runAsync();  supplyAsync();
         //  hello -- 类似于开启一个线程去执行任务.
         //  CompletableFuture<Void> future = CompletableFuture.runAsync(() -> System.out.println("hello"));
         //  null 获取这个线程执行的结果.
         //  System.out.println(future.get());

         //有返回值
          CompletableFuture<Integer> supplyAsync = CompletableFuture.supplyAsync(() -> {
               //计算
               int total = 0;
               for (int i = 1; i <= 365; i++) {
                   total += i;
               }

               int j = 1/0;
               return total;
          }).whenComplete((t, u) -> {
               //  66795 t:上一个线程执行的结果
               System.out.println(t);
               //  null u：表示是否有异常，补货异常的！
               System.out.println(u);
          }).exceptionally(t -> {
               System.out.println(t);
               return 404;
          });
          // 获取结果  打印数据
          System.out.println(supplyAsync.get());
     }
}
